home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / misc / math / YACAS.lha / share / yacas / localrules.ys < prev    next >
Text File  |  2001-05-24  |  2KB  |  123 lines

  1.  
  2. RuleBase("<-",{left,right});
  3. HoldArg("<-",left);
  4. HoldArg("<-",right);
  5.  
  6.  
  7. 10 # LocPredicate(exp_IsAtom) <--
  8. [
  9.   Local(tr,result);
  10.   tr:=patterns;
  11.   result:=False;
  12.   While (tr != {})
  13.   [
  14.     If (Head(Head(tr)) = exp,
  15.     [
  16.       result := True;
  17.       tr:={};
  18.     ],
  19.     [
  20.       tr := Tail(tr);
  21.     ]);
  22.   ];
  23.   result;
  24. ];
  25.  
  26. 10 # LocPredicate(exp_IsFunction) <--
  27. [
  28.   Local(tr,result,head);
  29.   tr:=patterns;
  30.   result:=False;
  31.   While (tr != {})
  32.   [
  33.     head := Head(Head(tr));
  34.     If (Not(IsAtom(head)) And exp[0]=head[1] And PatternMatches(head[2], exp),
  35.     [
  36.       result := True;
  37.       tr:={};
  38.     ],
  39.     [
  40.       tr := Tail(tr);
  41.     ]);
  42.   ];
  43.   result;
  44. ];
  45. 20 # LocPredicate(_exp) <-- False;
  46.  
  47. 10 # LocChange(exp_IsAtom) <--
  48. [
  49.   Local(tr,result);
  50.   tr:=patterns;
  51.   result:=False;
  52.   While (tr != {})
  53.   [
  54.     If (Head(Head(tr)) = exp,
  55.     [
  56.       result := Eval(Head(Tail(Head(tr))));
  57.       If(Verbose, Echo({exp," replaced with ",result}));
  58.       tr:={};
  59.     ],
  60.     [
  61.       tr := Tail(tr);
  62.     ]);
  63.   ];
  64.   result;
  65. ];
  66.  
  67. 10 # LocChange(exp_IsFunction) <--
  68. [
  69.   Local(tr,result,head);
  70.   tr:=patterns;
  71.   result:=False;
  72.   While (tr != {})
  73.   [
  74.     head := Head(Head(tr));
  75.     If (Not(IsAtom(head)) And exp[0]=head[1] And PatternMatches(head[2], exp),
  76.     [
  77.       result := Eval(Head(Tail(Head(tr))));
  78.       If(Verbose, Echo({exp," replaced with ",result}));
  79.       tr:={};
  80.     ],
  81.     [
  82.       tr := Tail(tr);
  83.     ]);
  84.   ];
  85.   result;
  86. ];
  87.  
  88. UnFence("LocPredicate",1);
  89. UnFence("LocChange",1);
  90.  
  91. 10 # LocProcessSingle({_pat,_post,_exp}) <-- { {pat[0],PatternCreate(pat,post)},exp };
  92. 20 # LocProcessSingle({pat_IsFunction,_exp}) <-- { {pat[0],PatternCreate(pat,True)},exp };
  93. 30 # LocProcessSingle({pat_IsAtom,_exp}) <-- { pat,exp };
  94. 40 # LocProcessSingle(pat_IsFunction <- _exp) <-- { {pat[0],PatternCreate(pat,True)},exp };
  95. 50 # LocProcessSingle(pat_IsAtom <- _exp) <-- { pat,exp };
  96.  
  97. LocProcess(patterns) :=
  98. [
  99.   MapSingle("LocProcessSingle",patterns);
  100. ];
  101.  
  102. (expression /: patterns) :=
  103. [
  104.   patterns := LocProcess(patterns);
  105.   Substitute(expression,"LocPredicate","LocChange");
  106. ];
  107.  
  108. (expression /:: patterns) :=
  109. [
  110.   Local(old);
  111.   patterns := LocProcess(patterns);
  112.   old := expression;
  113.   expression := Substitute(expression,"LocPredicate","LocChange");
  114.   While (expression != old)
  115.   [
  116.     old := expression;
  117.     expression := Substitute(expression,"LocPredicate","LocChange");
  118.   ];
  119.   expression;
  120. ];
  121.  
  122.  
  123.